package 集合;

import org.junit.Test;

import java.util.Date;

/**
 * 面试题
 * String 、StringBuilder 、StringBuffer区别
 *
 * @author 孔令富  2021/12/22
 */
public class StringBufferDemo {

    @Test
    public void stringTest() {

        // 测试创建String时间 JVM会不断进行创建回收对象，速度相对比较慢
        long a = new Date().getTime();
        String cc = "";
        int n = 10000;
        for (int i = 0; i < n; i++) {
            cc += "." + i;
        }
        System.out.println("String使用的时间" + (System.currentTimeMillis() - a) / 1000.0 + "s");

        // 测试创建StringBuilder时间  线程不安全  单线程下最快
        long s1 = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append("." + i);
        }
        System.out.println("StringBuilder使用的时间" + (System.currentTimeMillis() - s1) / 1000.0 + "s");

        // 测试创建StringBuffer时间   线程安全 Stringbuffer使用 synchronized
        long s2 = System.currentTimeMillis();
        StringBuffer sbf = new StringBuffer();
        for (int i = 0; i < n; i++) {
            sbf.append("." + i);
        }
        System.out.println("StringBuffer使用的时间" + (System.currentTimeMillis() - s2) / 1000.0 + "s");

    }
}
